package paquetDeCartes;
/** 
 * Défini une carte à jouer normale (4 couleurs, 13 valeurs différentes, plus le cavalier et le joker) 
 * @author sylvain
 * @version 1.1
 *
 */
public class CarteNormale extends CarteAJouer {

	protected int symbole;
	protected int couleur;
	
	// constantes
	// couleurs
	public static final int SANS = -1;
	public static final int COEUR = 1;
	public static final int CARREAU = 2;
	public static final int PIQUE = 3;
	public static final int TREFLE = 4;

	//couleurs
	public static final int ROUGE = 0;
	public static final int NOIR = 1;
	
	//valeurs
	public static final int AS = 1;
	public static final int VALET = 20;
	public static final int DAME = 30;
	public static final int ROI = 40;
	
	public static final int JOKER = 100;
	
	/** Constructeur */
	public CarteNormale(int valeur, int symbole, Dos dos) {
		super(valeur, dos);
		if (estUnSymbole(symbole) ) {
			this.symbole = symbole;
			this.couleur = calculerLaCouleur(symbole);
		}
		else {
			this.valeur=JOKER;
			this.symbole=SANS;
		}
	}
	
	public CarteNormale(int valeur, int symbole) {
		this(valeur,symbole, new Dos());
		
	}
	
	/** @return la couleur en fonction du symbole */
	protected int calculerLaCouleur(int symbole){
		if ((symbole == COEUR) || (symbole == CARREAU))
			return ROUGE;
		else
			return NOIR;
	}
	
	/** @return boolean : vrai si le symbole est un des 4 symboles */ 
	protected boolean estUnSymbole(int symb){
		return ((symb == COEUR) || (symb == CARREAU) || (symb == PIQUE) || (symb == TREFLE));
	}
	/** @return boolean : vrai si la valeur est une valeur autorisée */
	@Override
	protected boolean estUneValeur(int val){
		return ((val == AS) || (val == VALET) || (val == DAME) || (val == ROI) ||  (val == JOKER) || (val >= 2 && val <= 10));
	}
	/** @return boolean : vrai si la couleur passée est ROUGE */
	public boolean estRouge(int coul){
		return ((coul == COEUR) || (coul == CARREAU));
	}
	
	/** @return boolean : vrai si la couleur de la carte en cours est ROUGE */
	public boolean estRouge(){
		return (couleur == ROUGE);
	}
	/** @return boolean : vrai si la couleur passée est NOIR */
	public boolean estNoir(int coul){
		return ((coul == PIQUE) || (coul == TREFLE));
	}

	/** @return boolean : vrai si la couleur de la carte en cours est NOIR */
	public boolean estNoir(){
		return (couleur == NOIR);
	}
	/**
	 * @return the symbole
	 */
	public int getSymbole() {
		return symbole;
	}

	/**
	 * @return the couleur
	 */
	public int getCouleur() {
		return couleur;
	}
	
	/** Change le comportement du toString() */
	public String getStringValeur(){
		String aRetourner;
		
		switch(symbole) {
		case COEUR:
			aRetourner="Coeur";
			break;
		case CARREAU:
			aRetourner="Carreau";
			break;
		case PIQUE:
			aRetourner="Pique";
			break;
		case TREFLE:
			aRetourner="Trefle";
			break;
		default:
			aRetourner="";
			break;
		}
		
		switch(valeur) {
		case AS:
			aRetourner="AS " + aRetourner;
			break;
		case VALET:
			aRetourner="Valet " + aRetourner;
			break;
		case DAME:
			aRetourner="Dame " + aRetourner;
			break;
		case ROI:
			aRetourner="Roi " + aRetourner;
			break;
		case JOKER:
			aRetourner="Joker " + aRetourner;
			break;
		default:
			aRetourner=valeur + " " + aRetourner;
			break;
		}
		return aRetourner;
	}
	
}
